#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QIcon>
#include <QLineEdit>

#include "messageshowarea.h"
#include "selfinfowidget.h"
#include "sessiondetailwdiget.h"
#include "grounpsessiondetailwidget.h"
#include "debug.h"
#include "addfrienddialog.h"
#include "historymessagewidget.h"

#include "model/datacenter.h"

class MessageEditArea;
class SessionFriendArea;

class MainWidget : public QWidget
{
    Q_OBJECT
private:
    static MainWidget* instance;

    MainWidget(QWidget *parent = nullptr);

public:
    // 单例模式,将构造函数私有化
    static MainWidget* getInstance();
    ~MainWidget();

    void initMainWidget();
    void initLeftWidget();
    void initMidWidget();
    void initRightWidget();

    void initSignalSlot();

    void loadSessionList();
    void loadFriendList();
    void loadApplyList();
    void loadRecentMessage(const QString& chatSessionId);

    void updateFriendList();
    void updateChatSessionList();
    void updateApplyList();
    void updateRecentMessage(const QString& chatSessionId);

    // click FriendItem in FriendList
    // switch to SessionList and active the secpified session
    void switchToSession(const QString& userId);

    MessageShowArea* getMessageShowArea();

private:
    QWidget* windowLeft;            // 窗口左部分
    QWidget* windowMid;             // 窗口中间部分
    QWidget* windowRight;           // 窗口右部分

    QPushButton* userAvatar;        // 用户头像按钮
    QPushButton* sessionListBtn;    // 会话列表按钮
    QPushButton* friendListBtn;     // 好友列表按钮
    QPushButton* applyListBtn;      // 好友申请列表按钮
    QPushButton* moreBtn;			// 会话详情按钮

    QLabel* label; // right area session title

    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();

    enum ActiveTab {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };

    ActiveTab curTab = SESSION_LIST;

    QLineEdit* searchEdit;          // 搜索框
    QPushButton* addFriendBtn;      // 添加好友按钮

    SessionFriendArea* friendArea;  // 会话列表中的好友区域

    MessageShowArea* msgShowArea;   // 消息展示区
    MessageEditArea* msgEditArea;   // 消息编辑区

};
#endif // MAINWIDGET_H
